home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / GRAPHICS.SWG / 0052_Graphics Images.pas < prev    next >
Pascal/Delphi Source File  |  1994-01-27  |  3KB  |  116 lines

  1. {
  2.   Well, here are some image routines, I made it to where the WIDTH is stored
  3.  in the first two bytes and the HEIGHT is stored in the 3rd and 4th bytes...
  4.  If you must really know... I guess it goes along with TP's get/put image
  5.  convention... This is for mode $13 ONLY of coarse...
  6. }
  7.  
  8.   Procedure GetImage ( X1, Y1, X2, Y2 : Integer; VAR DEST ) ;
  9.    Var Width,S,O : Word ;
  10.  
  11.     BEGIN
  12.      S := SEG (DEST);
  13.      O := OFS (DEST);
  14.  
  15.      ASM
  16.       PUSH DS
  17.  
  18.       MOV DX, Video_Seg
  19.       MOV DS, DX
  20.       MOV BX, 320
  21.       MOV AX, Y1; MUL BX
  22.       ADD AX, X1; MOV SI, AX
  23.  
  24.       MOV DX, S
  25.       MOV ES, DX
  26.       MOV DI, O
  27.  
  28.       MOV DX, Y2; SUB DX, Y1; INC DX
  29.       MOV BX, X2; SUB BX, X1; INC BX
  30.       MOV WIDTH, BX
  31.  
  32.       MOV AX, WIDTH
  33.       STOSW
  34.       MOV AX, DX
  35.       STOSW
  36.  
  37.      @LOOP:
  38.       MOV CX, WIDTH
  39.       REP MOVSB
  40.       ADD SI, 320; SUB SI, WIDTH
  41.       DEC DX
  42.       JNZ @LOOP
  43.  
  44.       POP DS
  45.      End ;
  46.    End ;
  47.  
  48.   Procedure PutImage ( X1, Y1 : Integer; VAR SOURCE ) ;
  49.    Var Width, S, O : Word ;
  50.     BEGIN
  51.      S := SEG (SOURCE);
  52.      O := OFS (SOURCE);
  53.  
  54.      ASM
  55.       PUSH DS
  56.  
  57.       MOV DX, Video_Seg
  58.       MOV ES, DX
  59.       MOV BX, 320            { Setup Dest Addr }
  60.       MOV AX, Y1; MUL BX
  61.       ADD AX, X1; MOV DI, AX
  62.  
  63.       MOV DX, S { Setup Source Addr }
  64.       MOV DS, DX
  65.       MOV SI, O
  66.  
  67.       LODSW   { Get Width and Height }
  68.       MOV WIDTH, AX
  69.       LODSW
  70.       MOV DX, AX
  71.  
  72.      @LOOP:
  73.       MOV CX, WIDTH
  74.       REP MOVSB
  75.       ADD DI, 320; SUB DI, WIDTH
  76.       DEC DX
  77.       JNZ @LOOP
  78.  
  79.       POP DS
  80.      End ;
  81.    End ;
  82.  
  83.   Function SaveImage ( X1, Y1, X2, Y2 : Integer ; VAR Size : Word ) : Pointer ;
  84.    Var Img : Pointer ;
  85.     Begin
  86.      FixInt ( X1, X2 ) ; { Put lesser in X1 }
  87.      FixInt ( Y1, Y2 ) ; { Put lesser in Y1 }
  88.      Size := WORD((X2-X1+1)*(Y2-Y1+1) +4);
  89.      GetMem ( Img, Size ) ;
  90.      GetImage ( X1, Y1, X2, Y2, Img^ ) ;
  91.      SaveImage := Img ;
  92.     End ;
  93.  
  94.  Procedure CopyImage ( X1, Y1, X2, Y2, Dx, DY : Integer ) ;
  95.   Var Img : Pointer ;
  96.       Size : Word ;
  97.    Begin
  98.     Img := SaveImage ( X1, Y1, X2, Y2, Size ) ;
  99.     PutImage ( Dx, Dy, Img^) ;
  100.     FreeMem ( Img, Size ) ;
  101.    End ;
  102.  
  103.  Procedure LoadImage ( FileName : String ; VAR Img : Pointer ; Var Size : Word
  104.    Var F : File ;
  105.   Begin
  106.    Img := NIL ;
  107.    Size := 0 ;
  108.    If Not Exist ( FileName ) Then Exit ;
  109.    Assign ( F, Filename ) ;
  110.    Reset ( F, 1 ) ;
  111.    Size := FileSize ( F ) ;
  112.    GetMem ( Img, Size ) ;
  113.    BlockRead ( F, Img^, Size ) ;
  114.    Close ( F ) ;
  115.   End ;
  116.